home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / xfs / xfs_alloc.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  6KB  |  204 lines

  1. /*
  2.  * Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2 of the GNU General Public License as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  *
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.  Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  *
  19.  * You should have received a copy of the GNU General Public License along
  20.  * with this program; if not, write the Free Software Foundation, Inc., 59
  21.  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
  22.  *
  23.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  24.  * Mountain View, CA  94043, or:
  25.  *
  26.  * http://www.sgi.com
  27.  *
  28.  * For further information regarding this notice, see:
  29.  *
  30.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  31.  */
  32. #ifndef __XFS_ALLOC_H__
  33. #define    __XFS_ALLOC_H__
  34.  
  35. struct xfs_buf;
  36. struct xfs_mount;
  37. struct xfs_perag;
  38. struct xfs_trans;
  39.  
  40. /*
  41.  * Freespace allocation types.  Argument to xfs_alloc_[v]extent.
  42.  */
  43. typedef enum xfs_alloctype
  44. {
  45.     XFS_ALLOCTYPE_ANY_AG,        /* allocate anywhere, use rotor */
  46.     XFS_ALLOCTYPE_FIRST_AG,        /* ... start at ag 0 */
  47.     XFS_ALLOCTYPE_START_AG,        /* anywhere, start in this a.g. */
  48.     XFS_ALLOCTYPE_THIS_AG,        /* anywhere in this a.g. */
  49.     XFS_ALLOCTYPE_START_BNO,    /* near this block else anywhere */
  50.     XFS_ALLOCTYPE_NEAR_BNO,        /* in this a.g. and near this block */
  51.     XFS_ALLOCTYPE_THIS_BNO        /* at exactly this block */
  52. } xfs_alloctype_t;
  53.  
  54. /*
  55.  * Flags for xfs_alloc_fix_freelist.
  56.  */
  57. #define    XFS_ALLOC_FLAG_TRYLOCK    0x00000001  /* use trylock for buffer locking */
  58.  
  59. /*
  60.  * Argument structure for xfs_alloc routines.
  61.  * This is turned into a structure to avoid having 20 arguments passed
  62.  * down several levels of the stack.
  63.  */
  64. typedef struct xfs_alloc_arg {
  65.     struct xfs_trans *tp;        /* transaction pointer */
  66.     struct xfs_mount *mp;        /* file system mount point */
  67.     struct xfs_buf    *agbp;        /* buffer for a.g. freelist header */
  68.     struct xfs_perag *pag;        /* per-ag struct for this agno */
  69.     xfs_fsblock_t    fsbno;        /* file system block number */
  70.     xfs_agnumber_t    agno;        /* allocation group number */
  71.     xfs_agblock_t    agbno;        /* allocation group-relative block # */
  72.     xfs_extlen_t    minlen;        /* minimum size of extent */
  73.     xfs_extlen_t    maxlen;        /* maximum size of extent */
  74.     xfs_extlen_t    mod;        /* mod value for extent size */
  75.     xfs_extlen_t    prod;        /* prod value for extent size */
  76.     xfs_extlen_t    minleft;    /* min blocks must be left after us */
  77.     xfs_extlen_t    total;        /* total blocks needed in xaction */
  78.     xfs_extlen_t    alignment;    /* align answer to multiple of this */
  79.     xfs_extlen_t    minalignslop;    /* slop for minlen+alignment calcs */
  80.     xfs_extlen_t    len;        /* output: actual size of extent */
  81.     xfs_alloctype_t    type;        /* allocation type XFS_ALLOCTYPE_... */
  82.     xfs_alloctype_t    otype;        /* original allocation type */
  83.     char        wasdel;        /* set if allocation was prev delayed */
  84.     char        wasfromfl;    /* set if allocation is from freelist */
  85.     char        isfl;        /* set if is freelist blocks - !actg */
  86.     char        userdata;    /* set if this is user data */
  87. } xfs_alloc_arg_t;
  88.  
  89. /*
  90.  * Defines for userdata
  91.  */
  92. #define XFS_ALLOC_USERDATA        1    /* allocation is for user data*/
  93. #define XFS_ALLOC_INITIAL_USER_DATA    2    /* special case start of file */
  94.  
  95.  
  96. #ifdef __KERNEL__
  97.  
  98. #if defined(XFS_ALLOC_TRACE)
  99. /*
  100.  * Allocation tracing buffer size.
  101.  */
  102. #define    XFS_ALLOC_TRACE_SIZE    4096
  103. extern ktrace_t *xfs_alloc_trace_buf;
  104.  
  105. /*
  106.  * Types for alloc tracing.
  107.  */
  108. #define    XFS_ALLOC_KTRACE_ALLOC    1
  109. #define    XFS_ALLOC_KTRACE_FREE    2
  110. #define    XFS_ALLOC_KTRACE_MODAGF    3
  111. #define    XFS_ALLOC_KTRACE_BUSY    4
  112. #define    XFS_ALLOC_KTRACE_UNBUSY    5
  113. #define    XFS_ALLOC_KTRACE_BUSYSEARCH    6
  114. #endif
  115.  
  116. /*
  117.  * Compute and fill in value of m_ag_maxlevels.
  118.  */
  119. void
  120. xfs_alloc_compute_maxlevels(
  121.     struct xfs_mount    *mp);    /* file system mount structure */
  122.  
  123. /*
  124.  * Get a block from the freelist.
  125.  * Returns with the buffer for the block gotten.
  126.  */
  127. int                /* error */
  128. xfs_alloc_get_freelist(
  129.     struct xfs_trans *tp,    /* transaction pointer */
  130.     struct xfs_buf    *agbp,    /* buffer containing the agf structure */
  131.     xfs_agblock_t    *bnop);    /* block address retrieved from freelist */
  132.  
  133. /*
  134.  * Log the given fields from the agf structure.
  135.  */
  136. void
  137. xfs_alloc_log_agf(
  138.     struct xfs_trans *tp,    /* transaction pointer */
  139.     struct xfs_buf    *bp,    /* buffer for a.g. freelist header */
  140.     int        fields);/* mask of fields to be logged (XFS_AGF_...) */
  141.  
  142. /*
  143.  * Interface for inode allocation to force the pag data to be initialized.
  144.  */
  145. int                /* error */
  146. xfs_alloc_pagf_init(
  147.     struct xfs_mount *mp,    /* file system mount structure */
  148.     struct xfs_trans *tp,    /* transaction pointer */
  149.     xfs_agnumber_t    agno,    /* allocation group number */
  150.     int        flags);    /* XFS_ALLOC_FLAGS_... */
  151.  
  152. /*
  153.  * Put the block on the freelist for the allocation group.
  154.  */
  155. int                /* error */
  156. xfs_alloc_put_freelist(
  157.     struct xfs_trans *tp,    /* transaction pointer */
  158.     struct xfs_buf    *agbp,    /* buffer for a.g. freelist header */
  159.     struct xfs_buf    *agflbp,/* buffer for a.g. free block array */
  160.     xfs_agblock_t    bno);    /* block being freed */
  161.  
  162. /*
  163.  * Read in the allocation group header (free/alloc section).
  164.  */
  165. int                    /* error  */
  166. xfs_alloc_read_agf(
  167.     struct xfs_mount *mp,        /* mount point structure */
  168.     struct xfs_trans *tp,        /* transaction pointer */
  169.     xfs_agnumber_t    agno,        /* allocation group number */
  170.     int        flags,        /* XFS_ALLOC_FLAG_... */
  171.     struct xfs_buf    **bpp);        /* buffer for the ag freelist header */
  172.  
  173. /*
  174.  * Allocate an extent (variable-size).
  175.  */
  176. int                /* error */
  177. xfs_alloc_vextent(
  178.     xfs_alloc_arg_t    *args);    /* allocation argument structure */
  179.  
  180. /*
  181.  * Free an extent.
  182.  */
  183. int                /* error */
  184. xfs_free_extent(
  185.     struct xfs_trans *tp,    /* transaction pointer */
  186.     xfs_fsblock_t    bno,    /* starting block number of extent */
  187.     xfs_extlen_t    len);    /* length of extent */
  188.  
  189. void
  190. xfs_alloc_mark_busy(xfs_trans_t *tp,
  191.         xfs_agnumber_t agno,
  192.         xfs_agblock_t bno,
  193.         xfs_extlen_t len);
  194.  
  195. void
  196. xfs_alloc_clear_busy(xfs_trans_t *tp,
  197.         xfs_agnumber_t ag,
  198.         int idx);
  199.  
  200.  
  201. #endif    /* __KERNEL__ */
  202.  
  203. #endif    /* __XFS_ALLOC_H__ */
  204.